package com.system.boot.setting.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;

import com.system.api.setting.entity.po.SysDictItem;
import jakarta.validation.Valid;
import org.springframework.validation.annotation.Validated;
import org.yang.common.core.exception.BaseException;
import org.yang.database.orm.entity.BaseQuery;
import org.yang.database.orm.entity.Options;

/**
 * 字典目录
 *
 * @author: lslands
 * @version: 1.0
 * @create: 2024/5/18
 * @description:
 */
@Validated
public interface DictItemService extends IService<SysDictItem> {

    /**
     * 判断同一绑定字典目录下,value是否重复
     * @param dictCode 字典编码
     * @param value 值
     * @author lslands
     * @date 2024/5/16 00:57
     * @throws BaseException 字段重复异常
     */
    void isExists(String dictCode,String value) throws BaseException;

    /**
     * 插入字典目录,并清除缓存
     * @param record 字典数据
     * @return int
     * @throws BaseException 空指针异常
     */
    int handInsert(@Valid SysDictItem record) throws BaseException;

    /**
     * 根据主键ID修改
     * @param record 修改对象
     * @return int
     * @throws BaseException 修改异常
     */
    int handUpdateById(@Valid SysDictItem record) throws BaseException;

    /**
     * 根据主键ID修改状态
     * @param id 主键ID
     * @param enabled 状态
     * @param revision 乐观锁版本
     * @return int
     * @throws BaseException 修改状态异常
     */
    int handEnabledById(Long id,Integer enabled,Integer revision) throws BaseException;

    /**
     * 根据主键ID更新默认
     * @param id 主键ID
     * @param defaulted 是否默认
     * @param revision 版本
     * @return int
     * @throws BaseException 异常
     */
    int handDefautedById(Long id,boolean defaulted,Integer revision) throws BaseException;

    /**
     * 词条列表
     * @param dictCode  字典编码
     * @return List<Options>
     * @throws BaseException 异常
     */
    List<Options> getOptions(String dictCode) throws BaseException;


    /**
     * 分页模糊查询列表
     * @param query 分页基础参数
     * @param dictCode 字典编码
     * @return Page<SysDict>
     * @throws BaseException 字典编码为空异常
     */
    Page<SysDictItem> getPage(BaseQuery query,String dictCode) throws BaseException;


    /**
     * 单条删除(逻辑);
     * @param id 主键ID
     * @return int
     * @throws BaseException 删除异常
     */
    int deleteOne(Long id) throws BaseException;


    /**
     * 批量删除
     * @param delete 是否物理删除标记
     * @param ids ids集
     * @return int
     * @throws BaseException 删除异常
     */
    int deleteBatch(boolean delete,List<Long> ids) throws BaseException;

    /**
     * 刷新字典缓存
     * @param flag 是否刷新
     */
    void resetCache(boolean flag);
}
